Streaming media is multimedia that is constantly received by, and normally presented to, an end-user (using a client) while it is being delivered by a streaming provider (using a server). Several protocols exist for streaming media, including the MICROSOFT™ Internet Information Server (IIS) Smooth Streaming protocol (referred to herein as smooth streaming). Prior to smooth streaming, most streaming media technologies used tight coupling between server and client with a stateful connection. The stateful connection between client and server created additional server overhead (because the server tracked a current state of each client), and limited the scalability of the server.
Smooth streaming provides stateless communication between the client and server by breaking media up into chunks that are individually addressable and can be individually requested by clients. For a particular media event or content item, the smooth streaming server provides a manifest file that describes each of the chunks that comprise the event. For example, a one-minute video provided by smooth streaming may include 60 one-second audiovisual chunks. Each chunk contains metadata and media content. The metadata may describe useful information about the media content, such as the bit rate of the media content, where the media content fits into a larger media element, a codec used to encode the media content, and so forth. The client uses this information to place the chunk into a storyboard of the larger media element and to properly decode and playback the media content. The chunks can be in any format, such as Motion Picture Experts Group (MPEG) 4 boxes or other containers. A smooth streaming client plays a media event to a user by reading the manifest and regularly requesting chunks from the server. The user may also skip around (e.g., seek, fast forward, rewind) and the client can provide these behaviors by requesting later or earlier chunks described by the manifest. For live events, the server may provide the manifest to the client piecemeal, so that the server informs the client of newly available chunks as they become available.
Each chunk may have its own Uniform Resource Locator (URL), allowing chunks to be cacheable by existing Internet infrastructure. The Internet contains many types of downloadable media content items, including audio, video, documents, and so forth. These content items are often very large, such as video in the hundreds of megabytes. Users often retrieve documents over the Internet using Hypertext Transfer Protocol (HTTP) through a web browser. The Internet has built up a large infrastructure of routers and proxies that are effective at caching data for HTTP. Servers can provide cached data to clients with less delay and by using fewer resources than re-requesting the content from the original source. For example, a user in New York may download a content item served from a host in Japan, and receive the content item through a router in California. If a user in New Jersey requests the same file, the router in California may be able to provide the content item without again requesting the data from the host in Japan. This reduces the network traffic over possibly strained routes, and allows the user in New Jersey to receive the content item with less latency.
While smooth streaming provides a great experience for viewing streaming media over the Internet and other networks, its implementation involves a significant amount of client-side work. For example, the client has to understand manifests, be able to dynamically build manifests for live events (where portions of the manifest are received over time), understand chunk unboxing and assembly for decoding by a codec, synchronizing multiple streams (such as audio and video data), and so forth. In addition, using smooth streaming involves tracking heuristics and adaptive responsiveness (e.g., to the rate of making chunk requests) on the client. The heuristics are complicated and needed for adaptive streaming to work properly and provide a great user experience. Client development is complex and each developer that wants to play smooth streaming content has to deal with intricate platform specific details and then write a smooth streaming client.